package com.doit.demo07;
/*
    Object 类
        wait()当前线程等待//必须由对象监视器调用 就是在同步中调用
        notify()唤醒当前监视器对象上等待的线程中的一个线程 随机

        以上两个方法都必须同步线程中使用
*/
public class test_Object {
    public static void main(String[] args) throws InterruptedException {
        Object obj = new Object();
        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (obj)
                {
                    try {
                        System.out.println("开始等待被唤醒");
                        obj.wait();//锁会在wait的时候被释放
                        //注意 锁在Thread.sleep()的时候不会被释放
                        //如果将wait换成sleep将不是等待唤醒状态 等待时间到就自动执行下一条
                        System.out.println("已经被唤醒");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        Thread.sleep(3000);
        System.out.println("准备唤醒");
        synchronized (obj){
            obj.notify();//锁会在obj.wait()的时候释放
        }
    }
}
